#!/bin/bash

# 脚本说明：
# 本脚本用于交互式设置Linux主机名和有线网卡IP地址、网关、DNS（DNS固定为114.114.114.114），自动适配常见RHEL/CentOS 6/7/8/9网络服务重启方式。
# - 自动识别并选择已连接的有线网卡
# - 根据IP网段自动设置常用网关，否则手动输入
# - 禁用IPv6
# 使用方法：
#   1. 赋予执行权限：chmod +x set_hostname_ip.sh
#   2. 以root或sudo权限运行：sudo ./set_hostname_ip.sh
#

# 交互式输入主机名、IP、网卡、网关、DNS
read -p "请输入新的主机名: " new_hostname
read -p "请输入IP地址（如172.16.2.21/24）: " new_ip

# 自动获取网卡名称并让用户选择
nic_list=($(nmcli device status | awk '/connected/ && $2=="ethernet" {print $1}'))
echo "可用网卡："
select nic in "${nic_list[@]}"; do
  if [[ -n "$nic" ]]; then
    echo "已选择网卡: $nic"
    break
  else
    echo "无效选择，请重新输入编号。"
  fi
done

new_dns="114.114.114.114"
echo "DNS已统一设置为: $new_dns"

# 自动判断网关
if [[ $new_ip =~ ^172\.16\. ]]; then
  new_gw="172.16.2.1"
  echo "自动设置网关为: $new_gw"
elif [[ $new_ip =~ ^192\.168\. ]]; then
  new_gw="192.168.1.1"
  echo "自动设置网关为: $new_gw"
else
  read -p "请输入网关: " new_gw
fi

# 设置主机名
sudo hostnamectl set-hostname "$new_hostname"
echo "主机名已更改为: $new_hostname"

# 配置选定网卡
sudo nmcli c m "$nic" \
  ipv4.address "$new_ip" \
  ipv4.gateway "$new_gw" \
  ipv4.dns "$new_dns" \
  ipv4.method manual \
  connection.autoconnect yes \
  ipv6.method ignore

# 重启网络服务，适配不同Linux版本
if systemctl status NetworkManager &>/dev/null; then
  echo "检测到 NetworkManager，正在重启..."
  sudo systemctl restart NetworkManager
elif systemctl status network &>/dev/null; then
  echo "检测到 network 服务，正在重启..."
  sudo systemctl restart network
else
  echo "尝试使用 service network restart..."
  sudo service network restart
fi
echo "网络配置已完成。"